/**  
 
* @author xuzhixiang 

* @date 2018年12月28日  

*/
package com.moxi.tree;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.UnsupportedEncodingException;

/**
 * 
 * @author xuzhixiang
 * @date 2018年12月28日上午9:34:40
 */
public class Demo1 {

	/**
	 * 获取所有的子串
	 * 
	 * @author xuzhixiang
	 * @date 2018年12月28日下午12:06:01
	 */
	static String getAllSubstrings(String str) {
		int max = 0;
		String maxStr = "";
		// List<String> list = new ArrayList<String>();
		if (str.length() == 0)
			return "";
		else {
			for (int i = 0; i < str.length(); i++) {
				for (int j = 0; i + j <= str.length(); j++) {
					if (str.substring(i, i + j) == null || str.substring(i, i + j).equals("")) {
						continue;
					}
					String item = str.substring(i, i + j);
					StringBuffer sb = new StringBuffer(str.substring(i, i + j));
					String temp = sb.reverse().toString();
					if (item.equals(temp)) {
						if (item.length() > max) {
							max = item.length();
							maxStr = item;
						}
					}
					// System.out.println(str.substring(i, i + j));
					// list.add(str.substring(i, i + j));
				}
			}
		}
		return maxStr;
	}

	/**
	 * 将文件中的内容读取出来
	 * 
	 * @date 2018年12月28日12:18:02
	 */
	public static String readToString(String fileName) {
		String encoding = "gbk";
		File file = new File(fileName);
		Long filelength = file.length();
		byte[] filecontent = new byte[filelength.intValue()];
		try {
			FileInputStream in = new FileInputStream(file);
			in.read(filecontent);
			in.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		try {
			return new String(filecontent, encoding);
		} catch (UnsupportedEncodingException e) {
			System.err.println("The OS does not support " + encoding);
			e.printStackTrace();
			return null;
		}
	}

	public static void main(String args[]) {
		System.out.println("##方法①遍历所有子串##");
		System.out.println("样例输入:\r\n" + "abab\r\n" + "bbbb\r\n" + "abba");
		System.out.println("样例输出：");
		System.out.println(getAllSubstrings("abab").length());
		System.out.println(getAllSubstrings("bbbb").length());
		System.out.println(getAllSubstrings("abba").length());

		String text = readToString("D:\\brca2.txt");
		// 将文本中的回车换行替换掉
		text = text.replaceAll("[\\t\\n\\r]", "");
		String str = getAllSubstrings(text);

		System.out.println("字符串文本所得回文子序列为:" + str);
		System.out.println("字符串文本所得回文子序列长度为:" + str.length());
	}
}
